package com.zbkj.service.service.saleroom;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.zbkj.common.model.saleroom.SaleRoom;
import com.zbkj.common.request.*;
import com.zbkj.common.response.ProductAndProductAttrValueResponse;
import com.zbkj.common.response.RefundOrderResponse;

import java.util.List;
import java.util.Map;

/**
 * 门店信息主Service接口
 *
 * @author zkf
 * @date 2025-02-21
 */
public interface ISaleRoomService extends IService<SaleRoom> {
    /**
     * 查询门店信息主
     *
     * @param id 门店信息主主键
     * @return 门店信息主
     */
    public SaleRoom selectSaleRoomById(Long id);

    /**
     * 查询门店信息主列表
     *
     * @param saleRoom 门店信息主
     * @return 门店信息主集合
     */
    public PageInfo<SaleRoom> selectSaleRoomList(SaleRoom saleRoom, PageParamRequest pageParamRequest);

    /**
     * 新增门店信息主
     *
     * @param saleRoom 门店信息主
     * @return 结果
     */
    public int insertSaleRoom(SaleRoom saleRoom);

    /**
     * 修改门店信息主
     *
     * @param saleRoom 门店信息主
     * @return 结果
     */
    public int updateSaleRoom(SaleRoom saleRoom);

    /**
     * 批量删除门店信息主
     *
     * @param ids 需要删除的门店信息主主键集合
     * @return 结果
     */
    public int deleteSaleRoomByIds(Long[] ids);

    /**
     * 删除门店信息主信息
     *
     * @param id 门店信息主主键
     * @return 结果
     */
    public int deleteSaleRoomById(Long id);

    /**
     * 到店自提下单页面到店自提时获取门店接口
     *
     * @param shopSpecIds
     * @return
     */
    List<SaleRoom> selectNearRooms(String position, String shopSpecIds, String city);

    Map<String, Object> getRecentlyRoom(ProductAttrRequest productAttrRequest);

    /**
     * 到店自提下单页面到店自提时获取门店接口
     *
     * @param productAttrRequest
     * @return
     */
    List<SaleRoom> getSaleroomsList(ProductAttrRequest productAttrRequest);

    /**
     * 查询门店商品信息列表
     *
     * @param saleRoomProductRequest
     * @return
     */
    PageInfo<ProductAndProductAttrValueResponse> selectSaleRoomProductList(SaleRoomProductRequest saleRoomProductRequest);

    /**
     * 查询门店订单列表
     *
     * @param saleRoomOrderRequest
     * @return
     */
    Map<String, Object> selectOrderList(SaleRoomOrderRequest saleRoomOrderRequest);


    /**
     * 扣减门店商品库存
     *
     * @param attrValueId
     * @param num
     * @param operationTypeSubtract
     * @param roomId
     */
    Boolean operationStock(Integer attrValueId, Integer num, String operationTypeSubtract, Integer roomId);

    /**
     * 同城配送-预约配送-查询最近的一个配送中心
     *
     * @param positionRequest
     * @return
     */
    SaleRoom selectRecently(PositionRequest positionRequest);

    /**
     * 根据城市查询配送中心列表
     *
     * @param cityRequest
     * @return
     */
    PageInfo<SaleRoom> listByCity(CityRequest cityRequest);

    /**
     * 查询所有门店所在的城市列表-去重
     *
     * @param pageParamRequest
     * @return
     */
    PageInfo<String> listCityList(PageParamRequest pageParamRequest);

    /**
     * 获取所有门店配送范围列表(经纬度数组对象列表)
     *
     * @return
     */
    List<List<Double[]>> getDeliveryRangeList();

    /**
     * 同城配送判断门店是否位置超过30KM/门店缺货,返回最近的一个门店
     *
     * @param productAttrRequest
     * @return
     */
    Map<String, Object> getRecentlyRoomV2(ProductAttrRequest productAttrRequest);

    /**
     * 根据收货地址的经纬度查询所属配送范围的门店。如没有,就是快递发货，在配送范围的话，判断是否有库存，有库存直接同城配送，没有预约配送
     *
     * @param productAttrRequest
     * @return
     */
    Map<String, Object> getRecentlyRoomV3(ProductAttrRequest productAttrRequest);

    /**
     * 退款订单列表
     *
     * @param returnOrderListRequest
     * @return
     */
    PageInfo<RefundOrderResponse> getRefundOrderList(ReturnOrderListRequest returnOrderListRequest);
}